﻿#pragma once

#include "CEntity.h"
#include "CGameSettingsInput.h"
#include "CLoopbackPacketSender.h"
#include "CMinecraftUIRenderContext.h"
#include "TextHolder.h"

class Minecraft {
private:
	[[maybe_unused]] uint8_t pad_0x8[0xD0]{};  // 0x8
public:
	float* timer{};       // 0xD8
	float* otherTimer{};  // 0xE0

public:
	virtual void Destructor();
	virtual int getEntityRegistry(void);
	virtual int getEntityRegistry2(void);
	virtual void setSimTimePause(bool);
	virtual void setSimTimeScale(float);
	virtual bool getSimPaused(void);
	virtual bool isOnlineClient(void);

	void setTimerSpeed(float tps) {
		*timer = tps;
		*otherTimer = tps;
	};
};

class Tessellator;
class C_Block;

class BlockTessellator;
class ResourceLocation {
private:
	[[maybe_unused]] uint8_t pad[0x28]{};
	uint64_t hashCode{};  // 0x28
	[[maybe_unused]] uint8_t pad2[8]{};
};

class HashedString {
private:
	uint64_t hash{};
	TextHolder text{};  // 0x0008

public:
	constexpr HashedString(const std::u8string_view text) {
		this->text.setText(text);
		this->computeHash();
	}

	constexpr HashedString(uint64_t inputhash, const std::u8string_view text) {
		// fast_io::freestanding::my_memset(this, 0x0, sizeof(HashedString));
		this->hash = inputhash;
		this->text.setText(text);
	}

	constexpr void computeHash() {
		hash = 0xCBF29CE484222325ui64;
		if (this->text.getTextLength() <= 0) [[unlikely]]
			return;

		for (auto str : text.getString())
			hash = (uint8_t)str ^ 0x100000001B3ui64 * hash;
	}

	constexpr uint64_t getHash() const {
		return this->hash;
	}
};

namespace mce {
class TextureGroup;
class MaterialPtr;
class Mesh {
public:
	// void renderMesh(__int64 screenContext, mce::MaterialPtr* material, size_t numTextures, __int64** textureArray);

	// template <size_t numTextures>
	// void renderMesh(__int64 screenContext, mce::MaterialPtr* material, fast_io::freestanding::array<__int64*, numTextures> textures) {
	//	this->renderMesh(screenContext, material, numTextures, &textures[0]);
	// }
};

class TexturePtr {
private:
	uintptr_t* clientTexture{};
	[[maybe_unused]] uint8_t pad[0x8]{};
	ResourceLocation resourceLocation{};  // 0x10

public:
	uintptr_t* getClientTexture() const;
};

class MaterialPtr {
private:
	std::shared_ptr<void> materialPtr{};
};
}  // namespace mce

class LevelRenderer {
private:
	[[maybe_unused]] uint8_t pad_0x0000[0x58]{};  // 0x0000
public:
	mce::TextureGroup* textureGroup{};  // 0x0058
private:
	[[maybe_unused]] uint8_t pad_0x0060[0xE0]{};  // 0x0060
public:
	mce::TexturePtr atlasTexture{};  // 0x140
private:
	[[maybe_unused]] uint8_t pad_0x0188[0x150]{};  // 0x0188
public:
	BlockTessellator* blockTessellator{};  // 0x02D8
private:
	[[maybe_unused]] uint8_t pad_0x02F0[0x568]{};  // 0x02E0
	vec3_t origin{};              // 0x0890
public:
	vec3_t& getOrigin() const;

	vec3_t& getLoader() const;

	uintptr_t getLevelRendererPlayer() const;
};
class HitDetectSystem;

struct C_FontRepository_FontList_FontEntry {
public:
	class C_Font* font{};

private:
	void* sharedFontPtr{};
};

struct C_FontRepository_FontList {
public:
	C_FontRepository_FontList_FontEntry fontEntries[9]{};
};

struct C_FontRepository {
private:
	uintptr_t* font_repository_vtable{};  // 0x0000
	[[maybe_unused]] __int64 pad{};       // 0x0008
	void* ptrToSelf{};                    // 0x0010
	void* ptrToSelfSharedPtr{};           // 0x0018
	[[maybe_unused]] __int64 pad2{};      // 0x0020
public:
	C_FontRepository_FontList* fontList{};  // 0x0028
											// C_FontRepository_FontList* fontList1;  //0x0040
};

class MinecraftGame {
	[[maybe_unused]] uint8_t pad_0000[0x110]{};  // 0x0000
public:
	C_FontRepository* fontRepository{};  // 0x00110
private:
	[[maybe_unused]] uint8_t pad_0100[0x8]{};  // 0x00118
public:
	class C_Font* mcFont{};  // 0x00120
private:
	[[maybe_unused]] uint8_t pad_0128[0x18]{};  // 0x00128
public:
	C_FontRepository* fontRepository1{};  // 0x0140
private:
	[[maybe_unused]] uint8_t pad_0148[0x1D0]{};  // 0x0148
public:
	bool canUseKeys{};  // 0x0318
private:
	[[maybe_unused]] uint8_t pad_0301[799]{};  // 0x0319
public:
	TextHolder xuid{};  // 0x0638
public:
	// 0x2F0
	C_Font* getTheGoodFontThankYou() const;

	C_Font* getTheRandomFontPlease() const;

	C_Font* getOldFont() const;

	C_Font* getTheBetterFontYes() const;

	C_Font* getMCFont() const;

	const bool canUseKeybinds() const;

	int64_t getServerEntries();
};

class C_GuiData {
private:
	[[maybe_unused]] uint8_t pad_0x0000[0x18]{};  // 0x0000
public:
	float widthReal{};   // 0x0018
	float heightReal{};  // 0x001C

	float widthReal2{};   // 0x0020
	float heightReal2{};  // 0x0024

	float widthGame{};   // 0x0028
	float heightGame{};  // 0x002C

public:
	static void displayClientMessage(const char8_t* const c, const size_t size) noexcept;
	static void displayClientMessage(const std::u8string_view a2) noexcept;

	template <typename... _Ty>
	static constexpr void displayClientMessageC(_Ty&&... fmt) {
		return displayClientMessage(fast_io::u8concat(fmt...));
	}
	static bool isHeliumMessage;
};

struct PtrToGameSettings3 {
private:
	[[maybe_unused]] uint8_t pad_0x0000[0x18]{};  // 0x0000
public:
	C_GameSettingsInput* settingsInput{};
};

struct PtrToGameSettings2 {
private:
	[[maybe_unused]] uint8_t pad_0x0000[0x148]{};  // 0x0000
public:
	PtrToGameSettings3* ptr{};
};

struct PtrToGameSettings1 {
private:
	[[maybe_unused]] uint8_t pad_0x0000[0x18]{};  // 0x0000
public:
	PtrToGameSettings2* ptr{};
};

class C_MoveInputHandler;
class C_CameraManager;

class C_ClientInstance {
private:
	[[maybe_unused]] uint8_t pad_0x8[0xA0]{};  // 0x8
public:
	MinecraftGame* minecraftGame{};  // 0xA8
private:
	MinecraftGame* N00000A0C{};  // 0xB0
	MinecraftGame* N00000A0D{};  // 0xB8
public:
	Minecraft* minecraft{};  // 0xC0
private:
	[[maybe_unused]] uint8_t pad_0xC8[0x8]{};  // 0xC8
public:
	LevelRenderer* levelRenderer{};  // 0xD0
private:
	[[maybe_unused]] uint8_t pad_0xD8[0x8]{};  // 0xD8
public:
	C_LoopbackPacketSender* loopbackPacketSender{};  // 0xE0
private:
	[[maybe_unused]] uint8_t pad_0xE8[0x18]{};  // 0xE8
public:
	PtrToGameSettings1* ptr{};  // 0x100
private:
	[[maybe_unused]] uint8_t pad_0x108[0x8]{};  // 0x108
public:
	class HitDetectSystem* hitDetectSystem{};  // 0x110
	struct {
		uint8_t pad[0x238]{};
		struct {
			int64_t materialPtr{};
			size_t refCount{};
		} entityLineMaterial{};
	}* itemInHandRenderer{};  // 0x04D8
private:
	[[maybe_unused]] uint8_t pad_04C8[0x1B0]{};  // 0x04D0
public:
	float fovX{};  // 0x0680
private:
	[[maybe_unused]] uint8_t pad_068C[0x10]{};  // 0x0684
public:
	float fovY{};  // 0x0694
private:
	[[maybe_unused]] uint8_t pad_0670[0x1B8]{};  // 0x0678z

private:
	virtual __int64 destructorClientInstance();
	// Duplicate destructor
	virtual __int64 onInitMinecraftGame(void);
	virtual __int64 onDestroyMinecraftGame(void);
	virtual __int64 init(__int64*, __int64&, __int64&, __int64&, __int64&, int);
	virtual __int64 initSceneFactory(__int64*);
	virtual __int64 initGraphics(void);
	virtual __int64 stop(void);
	virtual __int64 teardown(void);
	virtual __int64 preShutDown(void);
	virtual __int64 requestLeaveGame(bool, bool);
	virtual __int64 stopPlayScreen(void);

public:
	virtual bool isLeaveGameDone(void) const;
	virtual void setupPlayScreenForLeaveGame(void);

private:
	virtual __int64 resetPrimaryClient(void);
	virtual __int64 resetGameSession(void);
	virtual __int64 tick(void);
	virtual __int64 frameUpdate(__int64&);
	virtual __int64 update(bool);
	virtual __int64 endFrame(void);
	virtual __int64 startSubClientLateJoin(bool);

public:
	virtual void setupClientGame(__int64&&, bool);

private:
	virtual __int64 sub_1400C5D00(void) const;
	virtual __int64 getLocalC_Player(void);
	virtual __int64 getLocalC_Player(void) const;
	virtual __int64 getCameraEntity(void) const;

public:
	virtual void setCameraEntity(C_Entity*);

private:
	virtual __int64 getCameraTargetEntity(void) const;

public:
	virtual void setCameraTargetEntity(C_Entity*);
	virtual bool isLeavingGame(void) const;
	virtual bool isDestroyingGame(void) const;

private:
	virtual __int64 sub_1400C98E0(void) const;
	virtual __int64 useLowFrequencyUIRender(void) const;

public:
	virtual bool isSplitScreenActive(void) const;
	virtual bool isVRClient(void) const;
	virtual bool isARClient(void) const;
	virtual bool isARVRClient(void) const;
	virtual bool isHoloviewerMode(void) const;
	virtual bool isHoloscreenMode(void) const;
	virtual bool isLivingroomMode(void) const;
	virtual bool isExitingLevel(void) const;
	virtual bool isNotVLRMode(void) const;
	virtual bool isHoloRealityMode(void) const;
	virtual bool isRealityFullVRMode(void) const;
	virtual bool isInBedScreen(void) const;
	virtual bool isKeyboardEnabled(void) const;
	virtual bool isVRTransitioning(void) const;
	virtual bool hasCommands(void) const;
	virtual bool isScriptingEnabled(void) const;

private:
	virtual __int64 getHoloviewerScale(void) const;
	virtual __int64 getSplitScreenCount(void) const;

public:
	virtual bool isStereoRendering(void) const;
	virtual bool isPlatformNX(void) const;
	virtual bool isLocalSplitscreenWith(__int64 const&) const;
	virtual bool isValidCrossPlatformSkin(void) const;
	virtual __int64 sub_1400C9B70(void);

private:
	virtual __int64 getSplitScreenInfo(void) const;
	virtual __int64 getCurrentMaxGUIScaleIndex(void) const;
	virtual __int64 getRealityModeFrameFactor(void) const;

public:
	virtual void setRealityModeFrameFactor(float const&);

private:
	virtual __int64 getRealityModeToggleTriggered(void) const;

public:
	virtual void setRealityModeToggleTriggered(bool);

private:
	virtual bool sub_1400C9C50(void);

public:
	virtual void setOpenControllerDisconnectScreen(bool);

private:
	virtual __int64 getClientPlayMode(void) const;

public:
	virtual void setClientPlayMode(__int64 const&);

private:
	virtual __int64 getLivingRoomForCredits(void) const;

public:
	virtual void setLivingRoomForCredits(bool);

private:
	virtual __int64 getCreditsCallback(void);

public:
	virtual void setCreditsCallback(__int64);
	virtual void setupTransitionForCredits(__int64);

private:
	virtual __int64 refreshScreenSizeData(void);
	virtual __int64 onScreenSizeChanged(int, int, float);
	virtual __int64 onGuiScaleOffsetChanged(void);
	virtual __int64 onSafeZoneChanged(void);
	virtual __int64 quit(std::u8string const&, std::u8string const&);

public:
	virtual __int64 getMinecraftGame(void) const;

private:
	virtual __int64 getAutomationClient(void) const;
	virtual __int64 getScreenshotStreamer(void) const;
	virtual __int64 getEventing(void) const;
	virtual __int64 sub_1400CA2E0(__int64 a1);
	virtual __int64 sub_1400CA2E8(__int64 a1);
	virtual __int64 sub_1400CA2F0(__int64 a1);
	virtual C_Font* getFont(void) const;
	virtual C_Font* getRuneFont(void) const;
	virtual C_Font* getUnicodeFont(void) const;
	virtual __int64 getGeometryGroup(void) const;
	virtual __int64 getMultiplayerServiceManager(void) const;
	virtual __int64 getLocalServerLevel(void);
	virtual __int64 getResourcePackRepository(void) const;
	virtual __int64 getResourcePackManager(void) const;
	virtual __int64 getSkinRepository(void) const;
	virtual __int64 getSkinRepositoryClientInterface(void) const;
	virtual __int64 sub_140630650(void) const;
	virtual void test0();
	virtual void test1();
	virtual __int64 sub_1400CA400(void) const;
	virtual __int64 getTextures(void) const;
	virtual __int64 getStoreCacheTextures(void) const;
	virtual __int64 getMinecraftGraphics(void) const;
	virtual __int64 getUIRepository(void) const;
	virtual __int64 getUserManager(void) const;
	virtual __int64 wantToQuit(void) const;

public:
	virtual bool isPrimaryLevelCrossPlatformMultiplayer(void) const;
	virtual bool isPrimaryLevelMultiplayer(void) const;
	virtual bool isAdhocEnabled(void) const;

private:
	virtual char sub_1406A1620(void) const;
	virtual __int64 linkToOffer(std::u8string const&, bool, std::u8string const&, __int64);
	virtual __int64 linkToAllOffers(std::u8string const&, std::u8string const&, bool, std::u8string const&, bool);
	virtual __int64 navigateToBrazeScreen(std::u8string const&, std::u8string const&, std::u8string const&, std::u8string const&, std::u8string const&, std::u8string const&, std::u8string const&);
	virtual __int64 navigateToStoreHomeScreen(void);
	virtual __int64 navigateToCoinPurchaseScreen(int, __int64);
	virtual __int64 navigateToPurchaseOfferScreen(__int64, bool);
	virtual __int64 navigateToOfferCollectionScreen(__int64&);
	virtual __int64 navigateToStoreSeeAllByCreatorScreen(std::u8string const&, bool);
	virtual __int64 navigateToServersScreen(bool);
	virtual __int64 navigateToHowToPlayScreen(std::u8string const&);
	virtual __int64 tryPushLeaveGameScreen(void);
	virtual char sub_1400D16A0(void) const;

public:
	virtual bool isReadyToRender(void) const;

private:
	virtual __int64 onDimensionChanged(void);
	virtual __int64 onGameEventNotification(__int64);

public:
	virtual TextHolder getTopScreenName(void) const;
	virtual void setLeaveGameInProgressAsReadyToContinue(void);

private:
	virtual __int64 stopDestroying(void);
	virtual __int64 onClientCreatedLevel(__int64);
	virtual __int64 getClientRandomId(void) const;
	virtual __int64 getUserAuthentication(void);
	virtual __int64 sub_1400CAC50(__int64* a2);
	virtual __int64 registerToUserManager(__int64&, int);
	virtual __int64 resumeWithUserManager(__int64&, int);
	virtual __int64 createUserAuthentication(std::u8string);
	virtual __int64 createUserAuthentication(unsigned long long, std::u8string const&);
	virtual __int64 getPlatformId(void) const;
	virtual __int64 getPlatformOnlineId(void) const;

public:
	virtual bool isHoloCursorNeeded(void) const;

private:
	virtual __int64 useController(void) const;
	virtual __int64 useTouchscreen(void) const;
	virtual void subFunction1(void) const;
	virtual void subFunction2(void) const;
	virtual void subFunction3(void) const;
	virtual void subFunction4(void) const;
	virtual void subFunction5(void) const;
	virtual void subFunction6(void) const;
	virtual void subFunction7(void) const;

public:
	virtual bool getMouseGrabbed(void) const;

private:
	virtual __int64 currentInputModeIsGamePadOrMotionController(void) const;
	virtual __int64 currentInputModeIsMouseAndKeyboard(void) const;
	virtual __int64 getForceMonoscopic(void) const;
	virtual __int64 allowPicking(void) const;

public:
	virtual bool isShowingMenu(void) const;
	virtual bool isShowingProgressScreen(void) const;
	virtual bool isShowingWorldProgressScreen(void) const;
	virtual bool isShowingDeathScreen(void) const;
	virtual bool isScreenReplaceable(void) const;
	virtual bool isInGame(void) const;
	virtual bool sub_14070D6F0(void) const;
	virtual bool isInRealm(void);

private:
	virtual __int64 readyForShutdown(void) const;

public:
	virtual bool isPrimaryClient(void) const;
	virtual bool isEduMode(void) const;
	virtual bool isGamepadCursorEnabled(void) const;

private:
	virtual Minecraft* getServerData(void);
	virtual Minecraft* getServerData(void) const;

public:
	virtual Level* getLevel(void);
	virtual Level* getLevel(void) const;
	virtual bool isPreGame(void) const;
	virtual bool isInMultiplayerGame(void) const;
	virtual bool isMultiC_PlayerClient(void) const;
	virtual __int64 sub_14012F590() const;
	virtual __int64 sub_14012F4D0() const;
	virtual __int64 getOptions(void);
	virtual __int64 getOptions(void) const;
	// virtual __int64 getOptionsPtr(void);
	virtual __int64 getUser(void);
	virtual __int64 getUser(void) const;
	virtual __int64 getGameRenderer(void) const;
	virtual __int64 getHolosceneRenderer(void) const;
	virtual __int64 getLevelRenderer(void) const;
	virtual __int64 getLevelRendererCameraProxy(void) const;

public:
	virtual C_CameraManager* getCameraManager(void) const;

private:
	virtual __int64 sub_1400CCC08(void) const;

public:
	virtual __int64 getLightTexture(void);

public:
	virtual void setupLevelRendering(__int64&, C_Entity&);

private:
	virtual __int64 getViewportInfo(void) const;

public:
	virtual void setViewportInfo(__int64 const&);

private:
	virtual __int64 getNormalizedViewportSize(void) const;
	virtual __int64 updateChunkRadius(void);

public:
	virtual void setUITexture(__int64*);

private:
	virtual __int64 getUITexture(void);

public:
	virtual void setLevelTexture(__int64*);

private:
	virtual __int64 getLevelTexture(void);

public:
	virtual void setUICursorTexture(__int64);

	virtual __int64 getUICursorTexture(void) const;
	virtual __int64 getCamera(void);
	virtual __int64 getShaderColor(void);
	virtual __int64 getDarkShaderColor(void);
	virtual __int64 clearGraphicsCache(void);
	virtual __int64 getNormalizedUICursorTransform(__int64&, float);
	virtual __int64 shouldRenderUICursor(void) const;
	virtual bool sub_1400CD3B0(void);
	virtual bool sub_1400CD3B1(void);
	virtual __int64 getGuiScale(void) const;
	virtual __int64 getGuiScaleOption(void) const;
	virtual __int64 getGuiScaleOffset(void) const;

public:
	virtual void setGuiScaleOffset(int);

private:
	virtual __int64 renderEditorGui(__int64&, bool);

public:
	virtual C_GuiData* getGuiDataDOESNTWORK(void);
	virtual C_GuiData* getGuiDataDOESNTWORK(void) const;

private:
	virtual __int64 getGuidedFlowManager(void);
	virtual __int64 getDpadScale(void) const;
	virtual __int64 getDateManager(void) const;
	virtual __int64 addOverrideHoursToDateTime(unsigned int);
	virtual __int64 getToastManager(void);
	virtual __int64 getTopScene(void);
	virtual __int64 getTopScene(void) const;
	virtual __int64 getActiveScene(void);
	virtual __int64 getActiveScene(void) const;
	virtual __int64 getSceneFactory(void) const;
	virtual __int64 getClientSceneStack(void) const;
	virtual __int64 getClientSceneStack(void);
	virtual __int64 sub_140634B30(void) const;
	virtual __int64 getMainSceneStack(void);
	virtual __int64 getMainSceneStack(void) const;
	virtual __int64 getCurrentSceneStack(void) const;
	virtual __int64 getCurrentSceneStack(void);
	virtual __int64 getCurrentUIRouter(void);
	virtual __int64 getCurrentUIRouter(void) const;
	virtual __int64 sub_14012BAB0(void) const;
	virtual __int64 prepareSceneFor(__int64);
	virtual __int64 getCachedScenes(void);

public:
	virtual TextHolder getScreenName(void) const;

private:
	virtual __int64 getScreenTelemetry(void) const;
	virtual __int64 getTopSceneType(void) const;
	virtual __int64 getMobEffectsLayout(void);
	virtual __int64 newFunc2(__int64 a2, __int64 a3, char a4);
	virtual __int64 newFunc3(__int64 a2, __int64 a3);
	virtual __int64 onMobEffectsChange(void);

public:
	virtual void setUISizeAndScale(int, int, float);

private:
	virtual __int64 forEachVisibleScreen(__int64, bool);
	virtual __int64 forEachScreen(__int64, bool);
	virtual __int64 forEachScreenConst(__int64, bool) const;
	virtual __int64 updateSceneStack(void);
	virtual __int64 forEachAlwaysAcceptInputScreen(__int64);
	virtual __int64 forEachAlwaysAcceptInputScreenWithTop(__int64);
	virtual __int64 showC_PlayerProfile(std::u8string const&, __int64);
	virtual __int64 getCurrentInputMode(void) const;

public:
	virtual bool isTouchGameplayAllowed(void) const;

private:
	virtual __int64 getMinecraftInput(void) const;

public:
	virtual void setHoloInput(__int64);

private:
	virtual __int64 getHoloInput(void) const;
	virtual __int64 getVoiceSystem(void) const;
	virtual __int64 getKeyboardManager(void);

public:
	virtual void setVoiceSystem(__int64);
	virtual void setLastPointerLocation(float, float, float);

private:
	virtual __int64 getLastPointerLocation(void);
	virtual __int64 shouldUseLastPointerLocationOnFocusChange(void);
	virtual __int64 adjustGazeCursorByMouse(float, float);
	virtual __int64 currentScreenShouldStealMouse(void);
	virtual __int64 getInProgressBAI(void) const;
	virtual __int64 newDictationDataAvailable(void) const;
	virtual __int64 clearDictationDataAvailable(void);
	virtual __int64 getDictationText(void) const;
	virtual __int64 getPacketSender(void);
	virtual __int64 getClientNetworkSystem(void);
	virtual __int64 getClientNetworkSystem(void) const;
	virtual void fake_function_to_make_grabmouse_work(void) const;

public:
	virtual void setMoveTurnInput(__int64);
	virtual C_MoveInputHandler* getMoveTurnInput(void);

public:
	virtual void setupPersistentControls(__int64);

private:
	virtual __int64 resetC_PlayerMovement(void);
	virtual __int64 onClientInputInitComplete(void);

public:
	virtual void setClientInputHandler(__int64);

private:
	virtual __int64 getInput(void) const;
	virtual __int64 getControllerId(void) const;

public:
	virtual bool hasConnectedController(void) const;

private:
	virtual __int64 getClientSubId(void) const;

public:
	virtual void setSuspendInput(bool);
	virtual void setDisableInput(bool);

private:
	virtual void subFunction(void) const;

public:
	virtual void grabMouse(void);
	virtual void releaseMouse(void);
	virtual void refocusMouse(void);

private:
	virtual __int64 resetBai(int);
	virtual __int64 clearInProgressBAI(void);
	virtual __int64 tickBuildAction(void);
	virtual __int64 getSoundEngine(void) const;
	virtual __int64 play(std::u8string const&, vec3_t const&, float, float);
	virtual __int64 playUI(std::u8string const&, float, float);
	virtual __int64 muteAudio(void);
	virtual __int64 unMuteAudio(void);
	virtual __int64 fadeOutMusic(void) const;
	virtual __int64 getTaskGroup(void);
	virtual __int64 onFullVanillaPackOnStack(void);

public:
	virtual bool isFullVanillaPackOnStack(void) const;

private:
	virtual __int64 onPlayerLoaded(C_Player&);

public:
	virtual void setClientGameMode(__int64);

private:
	virtual __int64 resetToDefaultGameMode(void);
	virtual __int64 connectToThirdParyServer(std::u8string const&, std::u8string const&, int);
	virtual __int64 startExternalNetworkWorld(__int64, std::u8string const&, bool);
	virtual __int64 checkForPiracy(void);
	virtual __int64 updateChatFilterStatus(void);
	virtual void sub_1400D2A20(void);

public:
	virtual void setBehaviorCommandCallback(__int64);
	virtual void setBehaviorCommandStatus(std::u8string, __int64);

private:
	virtual __int64 requestScreenshot(__int64&);
	virtual void sub_1400BE0A0(char a2);
	virtual __int64 getDevConsoleLogger(void) const;
	virtual __int64 requestImageFromUrl(std::u8string const&, __int64);
	virtual __int64 initializeRenderResources(void);
	virtual __int64 postInitRenderResources(void);
	virtual __int64 onAppSuspended(void);
	virtual __int64 onActiveResourcePacksChanged(__int64 const&);
	virtual __int64 reloadEntityRenderers(__int64 const&);
	virtual __int64 getBlockTessellator(void);
	virtual __int64 getBlockEntityRenderDispatcher(void);
	virtual __int64 getEntityRenderDispatcher(void);
	virtual __int64 getEntityBlockRenderer(void);
	virtual __int64 getItemInHandRenderer(void);
	virtual __int64 getItemRenderer(void);
	virtual __int64 getSentMessageHistory(void);
	virtual __int64 getUIProfanityContext(void) const;
	virtual __int64 initTTSClient(__int64&);
	virtual __int64 getTTSClient(void);
	virtual __int64 getTTSClient(void) const;
	virtual __int64 getTTSEventManager(void);
	virtual __int64 addTTSMessage(std::u8string const&, __int64, bool, bool, bool);
	virtual __int64 initCommands(void);
	virtual __int64 getUserId(void) const;
	virtual __int64 getServerConnectionTime(void) const;
	virtual __int64 getHMDState(void);
	virtual __int64 getHMDState(void) const;

public:
	virtual void setServerPingTime(unsigned int);

private:
	virtual __int64 getServerPingTime(void) const;

public:
	virtual void setDefaultPlayscreenTab(__int64);
	virtual void setClientInstanceState(__int64 const&);
	virtual void setUIEventCoordinator(__int64&&);

private:
	virtual __int64 getUIEventCoordinator(void);
	virtual __int64 getEventCoordinator(void);
	virtual __int64 computeScreenCoordsFromScreenNormCoords(float, float, short&, short&);
	virtual __int64 getNoBlockBreakUntil(void);

public:
	virtual void setNoBlockBreakUntil(__int64);
	virtual void setDictation(std::u8string const&);
	virtual void setNewDictationString(bool);
	virtual void setGameModule(__int64);

private:
	virtual __int64 getGameModule(void);
	virtual __int64 getGameCallbacks(void);
	virtual __int64 getStorageAreaStateListener(void);
	virtual __int64 getScriptEngine(void);
	virtual __int64 sendClientEnteredLevel(void);
	virtual __int64 getHitDetectSystem(void);

public:
	virtual bool isPlaying(void) const;

private:
	virtual __int64 getLatencyGraphDisplay(void) const;
	virtual __int64 createSkin(void);
	virtual __int64 onExtendDiskSpace(bool, __int64&, unsigned long long const&, __int64);
	virtual __int64 onLowDiskSpace(bool);
	virtual __int64 onOutOfDiskSpace(bool);
	virtual __int64 onCriticalDiskError(bool, __int64 const&);
	virtual __int64 onLevelCorrupt(void);
	virtual __int64 onGameModeChanged(void);
	virtual __int64 onTick(int, int);
	virtual __int64 onInternetUpdate(void);
	virtual __int64 onGameSessionReset(void);
	virtual __int64 onLevelExit(void);
	virtual __int64 updateScreens(void);

public:
	Level* getPointerStruct() const;

	glmatrixf* getRefDef() const;

	vec2_t* getMousePos() const;

	vec2_t getFov() const;

	C_Font* _getFont() const;

	C_Font* _getRuneFont() const;

	C_Font* _getUnicodeFont() const;

	C_GuiData* getGuiData() const;

	C_LocalPlayer* getLocalPlayer() const;

	inline C_GameSettingsInput* getGameSettingsInput() const { return this->ptr->ptr->ptr->settingsInput; };
};

